package org.eda2;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

// Clase Generador. Esta clase esta pensada para generar un fichero de texto
// aleatorio con un determinado formato.
// Primera linea, numero de usuarios.
// Restantes lineas: Compuestas por ICE, CE.
// El fichero ordena por ICE de menor a mayor. Se generan aleatoriamente entre los
// atributos ICE_Min y ICE_Max.
// Para cada ICE, se genera aleatoriamente un CE comprendido entre el CE_Min y el CE_Max.

/**
 * Clase Generador. Clase que genera aleatoriamente los datos de la nube de
 * usuarios.
 */
public class Generador {

	/** The datosUsuario. */
	private String datosUsuario;

	/** The numeroMaxUsuarios. */
	private int numeroMaxUsuarios; // Numero de usuarios a
									// generar.

	/** The ICE_Max. */
	private final int ICE_Max = 10000;

	/** The ICE_Min. */
	private final int ICE_Min = 100;

	/** The CE_Min. */
	private final int CE_Min = 1;

	/** The CE_Max. */
	private final int CE_Max = 1000;

	/** The usuariosICE. */
	private int[] usuariosICE;

	/** The usuariosCE. */
	private int[] usuariosCE;

	/**
	 * Metodo Generador. Metodo constructor de la clase.
	 * 
	 * @param nombreDeArchivo
	 *            , Variable de tipo String. Hace referencia al nombre del
	 *            archivo que generara el metodo y su ubicacion.
	 * 
	 */
	public Generador(String nombreDeArchivo, int x) {
		// Situamos la ubicacion del fichero de texto....
		String inputDirectory = System.getProperty("user.dir");
		this.numeroMaxUsuarios = x;
		this.datosUsuario = nombreDeArchivo + x + ".txt";
		this.usuariosCE = new int[x];
		this.usuariosICE = new int[x];
		inputDirectory = inputDirectory + File.separator + "src"
				+ File.separator + "org" + File.separator + "eda2"
				+ File.separator + "entradas" + File.separator + datosUsuario;

		// Generamos ambas listas de longitud, el numero de usuarios, de ICE y
		// CE aleatoriamente....
		for (int i = 0; i < numeroMaxUsuarios; i++) {
			int ICE = (int) (Math.random() * (ICE_Max - ICE_Min + 1) + ICE_Min);
			int CE = (int) (Math.random() * (CE_Max - CE_Min + 1) + CE_Min);
			usuariosICE[i] = ICE;
			usuariosCE[i] = CE;
		}
		// Ordenamos la lista de ICE ascendente....
		Arrays.sort(usuariosICE);

		// Realizamos la escritura del fichero...
		try {
			BufferedWriter out = new BufferedWriter(new FileWriter(
					inputDirectory));
			// Primera linea....numero de usuarios que contiene el fichero.
			String numero = numeroMaxUsuarios + "";
			out.write(numero);
			out.newLine();

			// Resto de lineas....
			for (int i = 0; i < numeroMaxUsuarios; i++) {
				// Para cada linea, insertamos un ICE ordenado ascendentemente
				// junto con un CE aleatorio. La dispersion puede ser muy alta,
				// ya que no se controla la progresion segun su ICE.
				String cadena = usuariosICE[i] + ", " + usuariosCE[i];
				out.write(cadena);
				if (i < numeroMaxUsuarios - 1)
					out.newLine();
			}
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
